#ifndef SYMBOLE_H_
#define SYMBOLE_H_

#include <iostream>
#include <vector>
#include <string>
using namespace std;

#define FICHIER_MOTS_CLE "motsCles.txt"

class Symbole {
public:

    enum categorieSymbole {
        MOTCLE, VARIABLE, ENTIER, REEL, INDEFINI, FINDEFICHIER, CHAINE, CARACTERE
    };
    Symbole(string s = string("")); // construit le symbole à partir de la chaine (string) ch lue par le lecteur de symbole dans un fichier
    bool operator ==(string ch); // pour tester l'égalité entre le symbole et une chaîne

    inline bool operator !=(string ch) {
        return !(*this == ch);
    } // pour tester la différence...

    inline string getChaine() {
        return this->chaine;
    } // accesseur

    inline void setChaine(string s) {
        this->chaine = s;
    }
    inline categorieSymbole getCat(){
        return this->categorie;
    }
    friend ostream & operator <<(ostream & cout, Symbole symb); // fonction amie pour pouvoir afficher un symbole sur cout 
    static bool isDouble(string s); // renvoi vrai si s est un float
    static bool isInt(string s); // renvoi vrai si s est un integer
    static bool isChar(string s); // renvoi vrai si s est un integer
    static bool isChaine(string s); // renvoi vrai si s est un integer

private:
    string chaine; // chaine du symbole
    categorieSymbole categorie; // categorie du symbole (voir type énuméré ci-dessus)
    static bool isMotCle(string s); // méthode de classe : renvoie vrai si s est un mot clé du langage
};

#endif /* SYMBOLE_H_ */
